package org.scau.studentevaluation.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.scau.studentevaluation.entity.dos.OrganizationDO;
import org.scau.studentevaluation.service.IOrganizationService;
import org.scau.studentevaluation.service.ImportMapperService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

/**
 * @Author: x1aolone
 * @Date: 2020/8/19 16:09
 */
@Slf4j
@Service
// Controller -> Service -> DAO
public class OrganizationServiceImpl implements IOrganizationService {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private ImportMapperService importMapperService;

    @Override
    public String findOrganization(String userId) {
        // key为moduleName:functionName
        // 如果使用Object，必须要实现序列化
        // 那么多次请求相同参数时，能否从redis中获取数据？
        // 抑或是必须使用同一个query对象作为key，才能从redis中获取数据
        // 如何获取当前模块名，作为key的一部分
//        String module = "Organization";
//        String function = "getOrganization";
//        String separator = ":";
//        // 先从redis中找
//        String key = module + separator + function + separator +
//                userId;
//        OrganizationVO vo = (OrganizationVO) RedisUtil.get(key);
//        if (vo != null) {
//            return vo;
//        }

        // 使用MybatisPlus进行单表的增删查改，无需编写SQL
        // 避免实际开发时编写SQL出现的各种神奇bug
        LambdaQueryWrapper<OrganizationDO> query = Wrappers.<OrganizationDO>lambdaQuery()
                .eq(OrganizationDO::getUserId, userId)
                .last(" limit 1");
        OrganizationDO DO = importMapperService.organizationMapper.selectOne(query);
        if (DO == null || DO.getOrganization() == null) {
            // 数据库里面没有的话，统一返回学生会
            return "学生会";
        }
        // 由于业务比较简答，只需要返回一个String，就不用经过DO->BO->VO的转换
        // 业务执行完毕，查询结果放入redis中
//        RedisUtil.set(key, do);
        return DO.getOrganization();
    }




}
